#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "stack"

using namespace std;
/*HJJ QQ479287006
 *给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
 

示例 1：

输入：s = "()"
输出：true
示例 2：

输入：s = "()[]{}"
输出：true
示例 3：

输入：s = "(]"
输出：false
示例 4：

输入：s = "([)]"
输出：false
示例 5：

输入：s = "{[]}"
输出：true

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */
stack<char> st;

bool isValid(string s) {


    for (const auto &item : s) {
        if (item == '(')
            st.push(item);
        else if (item == '{')
            st.push(item);
        else if (item == '[')
            st.push(item);
        else if (item == ')') {
            if (st.empty())
                return false;

            char temp = st.top();
            st.pop();
            if (temp != '(')
                return false;
        } else if (item == '}') {
            if (st.empty())
                return false;

            char temp = st.top();
            st.pop();
            if (temp != '{')
                return false;
        } else if (item == ']') {
            if (st.empty())
                return false;
            char temp = st.top();
            st.pop();
            if (temp != '[')
                return false;
        }
    }

    if (!st.empty())
        return false;

    return true;


}